import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../routes/app_routes.dart';
import '../../../../core/base/base_controller.dart';
import '../../../controllers/auth_controller.dart';

/// 密码恢复控制器
class RecoveryController extends BaseController {
  // 表单控制器
  final emailController = TextEditingController();
  final codeController = TextEditingController();
  final passwordController = TextEditingController();
  final confirmPasswordController = TextEditingController();
  
  // 表单Key
  final formKey = GlobalKey<FormState>();
  
  // 密码可见性
  final RxBool isPasswordVisible = false.obs;
  final RxBool isConfirmPasswordVisible = false.obs;
  
  // 是否为重置密码模式（否则为找回密码模式）
  final RxBool isReset;
  
  // 当前步骤（0: 请求验证码, 1: 验证验证码, 2: 重置密码, 3: 完成）
  final RxInt currentStep = 0.obs;
  
  // 是否已发送验证码
  final RxBool isCodeSent = false.obs;
  
  // 倒计时
  final RxInt countdown = 60.obs;
  
  // 注入认证控制器
  final AuthController _authController = Get.find<AuthController>();
  
  RecoveryController({bool isReset = false}) : isReset = isReset.obs;
  
  @override
  void onInit() {
    super.onInit();
    if (isReset.value) {
      currentStep.value = 2; // 直接进入重置密码步骤
    }
  }
  
  @override
  void onClose() {
    emailController.dispose();
    codeController.dispose();
    passwordController.dispose();
    confirmPasswordController.dispose();
    super.onClose();
  }
  
  /// 切换密码可见性
  void togglePasswordVisibility() {
    isPasswordVisible.value = !isPasswordVisible.value;
  }
  
  /// 切换确认密码可见性
  void toggleConfirmPasswordVisibility() {
    isConfirmPasswordVisible.value = !isConfirmPasswordVisible.value;
  }
  
  /// 发送验证码
  void sendCode() {
    if (emailController.text.isEmpty) {
      showError('请输入电子邮箱');
      return;
    }
    
    if (!GetUtils.isEmail(emailController.text)) {
      showError('请输入有效的电子邮箱');
      return;
    }
    
    // 显示加载中
    showLoading();
    
    // TODO: 实现实际的发送验证码逻辑，调用认证服务
    Future.delayed(const Duration(seconds: 1), () {
      // 隐藏加载中
      hideLoading();
      
      // 模拟发送成功
      isCodeSent.value = true;
      startCountdown();
      
      // 显示成功消息
      showSuccess('验证码已发送到您的邮箱');
      
      // 进入下一步
      currentStep.value = 1;
    });
  }
  
  /// 开始倒计时
  void startCountdown() {
    countdown.value = 60;
    Future.doWhile(() async {
      await Future.delayed(const Duration(seconds: 1));
      countdown.value--;
      return countdown.value > 0;
    }).then((_) {
      isCodeSent.value = false;
    });
  }
  
  /// 验证验证码
  void verifyCode() {
    if (codeController.text.isEmpty) {
      showError('请输入验证码');
      return;
    }
    
    // 显示加载中
    showLoading();
    
    // TODO: 实现实际的验证码验证逻辑，调用认证服务
    Future.delayed(const Duration(seconds: 1), () {
      // 隐藏加载中
      hideLoading();
      
      // 模拟验证成功
      // 进入下一步
      currentStep.value = 2;
    });
  }
  
  /// 重置密码
  void resetPassword() {
    if (!formKey.currentState!.validate()) {
      return;
    }
    
    // 显示加载中
    showLoading();
    
    // TODO: 实现实际的密码重置逻辑，调用认证服务
    Future.delayed(const Duration(seconds: 1), () {
      // 隐藏加载中
      hideLoading();
      
      // 模拟重置成功
      // 进入完成步骤
      currentStep.value = 3;
      
      // 显示成功消息
      showSuccess('密码重置成功');
    });
  }
  
  /// 完成并返回登录页面
  void finishAndGoToLogin() {
    Get.offAllNamed(AppRoutes.login);
  }
  
  /// 返回登录页面
  void goToLogin() {
    Get.back(); // 返回到登录页面
  }
  
  /// 发送密码重置邮件
  Future<void> sendPasswordResetEmail() async {
    if (formKey.currentState!.validate()) {
      isLoading.value = true;
      isEmailSent.value = false;
      
      try {
        // 调用认证控制器的发送密码重置邮件方法
        await _authController.sendPasswordResetEmail(emailController.text);
        
        // 成功发送后更新状态
        isEmailSent.value = true;
        Get.snackbar(
          '邮件已发送',
          '密码重置链接已发送到您的邮箱，请查收。',
          snackPosition: SnackPosition.BOTTOM,
        );
        
      } catch (e) {
        // 显示错误提示
        Get.snackbar(
          '发送失败',
          e.toString(),
          snackPosition: SnackPosition.BOTTOM,
          backgroundColor: Colors.red,
          colorText: Colors.white,
        );
      } finally {
        isLoading.value = false;
      }
    }
  }
  
  /// 邮箱验证规则
  String? validateEmail(String? value) {
    if (value == null || value.isEmpty) {
      return '请输入邮箱';
    }
    if (!GetUtils.isEmail(value)) {
      return '请输入有效的邮箱地址';
    }
    return null;
  }
} 